package org.example.configuration;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * AI配置类 - 配置Spring AI相关组件
 * 定义ChatClient和ChatMemory等核心Bean
 */
@Configuration // 标记此类为配置类，Spring会自动扫描并应用这些配置
public class AiConfiguration {

    /**
     * OpenAI聊天模型 - 自动注入，用于与AI模型交互
     * 根据application.properties中的配置连接到指定的AI模型服务
     */
    @Autowired private OpenAiChatModel chatModel;

    /**
     * 聊天记忆仓库 - 自动注入，用于存储对话历史记录
     */
    @Autowired JdbcChatMemoryRepository chatMemoryRepository;

    /**
     * 定义ChatClient Bean
     * ChatClient是与AI模型交互的核心客户端，封装了与模型通信的逻辑
     * @return 配置好的ChatClient实例
     */
    @Bean
    public ChatClient chatClient() {
        // 使用构建器模式创建ChatClient，传入AI模型实例
        return ChatClient.builder(chatModel).build();
    }

    /**
     * 定义ChatMemory Bean
     * MessageWindowChatMemory实现了基于消息窗口的聊天记忆功能
     * 可以限制历史消息数量，保持对话上下文的同时避免内存占用过大
     * @return 配置好的ChatMemory实例
     */
    @Bean
    public ChatMemory chatMemory() {

        // 使用构建器模式创建MessageWindowChatMemory
        return MessageWindowChatMemory.builder()
                .chatMemoryRepository(chatMemoryRepository) // 设置记忆仓库
                .maxMessages(100) // 设置最大消息数量为100条
                .build();
    }
}
